/*
 * Copyright (c) 2024 endless-sky
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef _HAL_VI_H_
#define _HAL_VI_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "hal_struct.h"

/**
 * @function:   Hal_Vi_Start
 * @brief:      开启视频输入
 * @param[in]:  HAL_U8 u8SenIdx          视频输入通道号
 * @param[in]:  HAL_U32 encChan         编码通道号
 * @param[in]:  HAL_VENC_CONFIG_S *pCfg  编码参数
 *
 * @return	返回DSP_SUCCESS-成功，其它值		失败，请参考错误码
 */
int32_t Hal_Vi_Start(uint8_t u8SenIdx);

/**
 * @function:   Hal_Vi_SetAlgoYuvSize
 * @brief:      设置用于算法的 YUV 通道（VPSS CH2）输出分辨率（可选）。
 *              若平台支持，则在下次 Hal_Vi_Start 时生效；不支持的平台可忽略并返回成功。
 * @param[in]:  u8SenIdx  视频输入通道号
 * @param[in]:  yuvWidth  输出宽度（0 表示恢复默认）
 * @param[in]:  yuvHeight 输出高度（0 表示恢复默认）
 * @return      HAL_SUCCESS-成功，其它值失败
 */
int32_t Hal_Vi_SetAlgoYuvSize(uint8_t u8SenIdx, uint32_t yuvWidth, uint32_t yuvHeight);

/**
 * @function:   Hal_Vi_Stop
 * @brief:      关闭视频输入
 * @param[in]:  HAL_U8 u8SenIdx   视频输入通道号
 * @param[in]:  HAL_U32 encChan  编码通道号
 *
 * @return  返回DSP_SUCCESS-成功，其它值        失败，请参考错误码
 */
int32_t Hal_Vi_Stop(uint8_t u8SenIdx);

/**
 * @function:   Hal_Vi_SetMirror
 * @brief:      设置视频镜像
 * @param[in]:  HAL_U32 chan              视频输入通道号
 * @param[in]:  HAL_VI_MIRROR_CFG_S *pCfg  镜像参数
 *
 * @return	返回DSP_SUCCESS-成功，其它值		失败，请参考错误码
 */
int32_t Hal_Vi_SetMirror(uint8_t u8SenIdx, HAL_VI_MIRROR_CFG_S *pCfg);

/**
 * @function:   Hal_Vi_SetRotate
 * @brief:      设置旋转角度
 * @param[in]:  HAL_U32 chan   视频输入通道号
 * @param[in]:  HAL_U32 angle  角度，暂只支持90的整数倍
 *
 * @return	返回DSP_SUCCESS-成功，其它值		失败，请参考错误码
 */
int32_t Hal_Vi_SetRotate(uint8_t u8SenIdx, uint32_t angle);

#ifdef __cplusplus
}
#endif

#endif // _HAL_VI_H_
